package com.z.redis.command.impl.set;

import com.z.redis.RedisCore;
import com.z.redis.command.Command;
import com.z.redis.command.CommandType;
import com.z.redis.datatype.BytesWrapper;
import com.z.redis.datatype.RedisSet;
import com.z.redis.resp.BulkString;
import com.z.redis.resp.Resp;
import com.z.redis.resp.RespArray;
import com.z.redis.resp.RespInt;
import io.netty.channel.ChannelHandlerContext;

import java.util.List;
import java.util.stream.Collectors;

/**
 * smembers key
 * 返回集合 key 中的所有成员。不存在的 key 被视为空集合。
 */
public class Smembers implements Command {
    private BytesWrapper key;

    @Override
    public CommandType type(){
        return CommandType.smembers;
    }

    @Override
    public void setContent(Resp[] array){
        key = ((BulkString) array[1]).getContent();
    }

    @Override
    public void handle(ChannelHandlerContext ctx, RedisCore redisCore){
        RedisSet redisSet = (RedisSet) redisCore.get(key);
        List<BulkString> collect = redisSet.smembers()
                .stream().map(keyName -> new BulkString(keyName))
                .collect(Collectors.toList());
        ctx.writeAndFlush(new RespArray(collect.toArray(new Resp[collect.size()])));
    }
}
